查看原文
其他

世界最大的色情网站是如何架构和处理数据量的

2015-08-11 云头条

云头条“智囊团”每晚8点分享,因时差原因,Bin 8:30进行了分享,感谢ing




大家好,我在加拿大Mindgeek公司工作,为了分享,早起了会 :)


这是主要的网站,别让坐板凳的朋友失望(因涉及中国法律,此处省略。。。。)


公司共1千余人,大概在全球7个地点有办事处,最大的地点在加拿大montreal,由于业务的原因,流量大是肯定的了


网站主要区分为两类,收费网站和免费网站


收费网站都是职业的,免费网站基本上一半一半吧


职业演员一般都是从洛杉矶拍摄的,有时候公司年会请比较著名的pornstar前来助兴

.......

OK, 刚才说到,公司的网站流量比较大,每天大概有大概接近1个亿不同IP地址访问


我们组基本上负责后台的数据收集,分析和处理,我们有合作伙伴,机房分布在美国纽约,芝加哥和欧洲阿姆斯特丹,所以服务器的事情我们不怎么操心,但是我们也有些业务使用了AWS和Google GCE


话题好大,我就介绍一下几个项目吧


Processing Cluster,这是我主持开发的一个项目


主要负责收集,分析处理公司所有的日志文件,系统设计的目标是没有SPOF


可扩展性


保证没有任何日志,包括没有任何一条记录丢失


在开发设计这个系统时,我借鉴了Maper reducer的部分思路,把系统设计为分布式的多个模块并发处理的模式


Mark一下,如何保证没有数据丢失


模块主要为Downloader, Parser, Publisher .....


为保证数据不丢失,我起的的名字是 file transactional feature

就是如果数据最终不能成功处理,那么整个事务中所有的文件都会被一次性回滚,然后会自动被重新处理


大家知道除了ETL,大多数处理文件更专注于如何聚合,高效聚合

所以我在设计开发时,进行了3层的聚合,分布在三个不同的部件中,最终保证最优的聚合,保证数据处理后能基本达到最小的尺寸

同时系统支持了多种输出模式,比如数据库MySQL,PostgreSQL,SQLserver

NoSQL 的Elasticsearch,AWS DynamoDB, Google BigQuery

文件模式输出为CSV


现在这套系统大概分布在10台机器上,每天大概处理10TB文件,250亿条记录左右,系统处理大概延时为1~10分钟左右


系统配置为界面配置,只要配置文件类型,地点,输入格式,输出格式和输出地点即可


每个模块都有自己的心跳,如果某个模块由于种种原因失效,崩溃,监控系统会自动重启这个模块,同时由于模块崩溃所造成的文件没有处理完毕,将会被自动被相同模块的其他Instances所接管


文件处理的大小,最小从几十K的小文件到十几GB的大文件皆可,也可以直接处理压缩文件


配发一张监控系统监控处理流量的截图


一张很久前画的老图了,方便理解


刚才讲的这个项目主要是基于文件处理的,毕竟都是有延迟的,所以我们又开发了基于流处理的另一个项目,起名叫做lightning


在lightning项目中,不同于ProcessingCluster,纯Java home made。Lightning使用了大量的open source



其实我们也尝试使用了AKKA和Storm,但是最终选用了Samza 配合Kafka,来保证数据的安全和完整性,毕竟这两者都来自LinkedIn,配合起来更加稳定


这个是Lightning数据处理的流程


在当前系统下,我们每天的流数据处理量大概是20亿条记录,数据延时下降到了1到3秒


然后我们有另一个项目,MVT (multivariatetesting)

实时的做 A/B/C/... 测试


还有项目是Fraud detection

检查fraud,我们这个行业,fraud还是很多的


有人比如买了账号,想共享给他人,我们可以检测到,这个是最基本的,系统有knowledge base,同时可以学习这个人的习惯和属性,比如客户端的属性,比如这个人的偏好,然后如果某天这个人的登陆location,客户端,甚至癖好有了很大的变化,我们会计算偏差值,按照比重判断这个人是不是账户本人


这些都是我们底层处理系统所能提供的能力,也是为什么我一开始介绍处理的项目了


关于MVT,我们会在每个客户记录cookie,确认测试人群


然后这些人群的内容会有所不同,同时web在load页面时,比如layout,content或者style会根据相关的variate id返回不同的data

然后记录用户的操作,最终可以统计bounce rate,还有页面浏览量,session length 等


关于流处理和文件处理还是不太一样,关于敏感数据,比如财务数据,我们还不能保证100%的不丢失,即使是kafka 和samza,所以文件方式处理始终是最安全的方式,同时很多文件处理并不要求很高的实时性,所以在一定的时间内,文件的稳定处理是不会被替代掉的


我们还有项目叫做 user profiling

这个项目是为匿名登录用户创建用户资料


这个tracking是跨我们公司所有的网站的,当时咨询公司的法律部门,这个属不属于侵犯隐私,但是告知还好,基本灰色地带吧,加上选择cookie时会有若干policy,你选了就好了


很多人都喜欢用隐私的浏览器,关闭后整个清空,那cookie就不好用了

比如头条兄喜欢日韩,那我们知道后,就会对他只投放日韩的广告,这样来提高广告的转化率

为此,我们和bluecava的公司合作过,侦测用户的信息,不依赖cookie,基本上是你所有能得到的客户端信息的一个聚合,包括浏览器,OS,屏幕大小,字体的组合,但是效果并不是很理想


我再给大家发一个我画的一个汇总图吧



这个基本上涵盖了我们的内容,但是这个图大概是几个月前我做的,现在还有些小的调整和技术的变更,但不影响理解


问题:


1、有考虑用spark么?

答:考虑过,我们使用了Spark SQL,但是在我们特定的环境下,性能比Tez差很多,所以弃用了Spark SQL


2、第一个项目和第二个项目的场景分别是什么?

答:我们做这些是为了什么,刚才我说的项目都是关于数据处理的,那基础打好了,我们就可以在基础上做我们想做的项目了,我们有个项目叫做Vortex,这个项目的目的是开发类似于google analytics 的分析报表,基于我们的流量,是无法使用Google Analytics的,所以我们自己开发了Vortex,客户端使用JS library内嵌到网页中发送events,主要是流量;Google只有在流量每月低于2千万的流量才可以免费使用,如果高于这个值就要收费,而且费用还很高,而且一个很让sales烦躁的是,数据一直都是sampling数据,我们是自己开发,为自己的sales量身定做,我想这个就是优势吧,当然对公司内部而言;我们在Google 之上又增加了新的功能,比如Generic Attributes,我们在Google 之上又增加了新的功能,比如Generic Attributes


这是昨晚11:30 左右的截图,第一行是系统更新的实时数据处理量


感谢Bin的分享~~~


关于“智囊团”云计算领域讨论群,周一至周五晚8点按照入群顺序,分享行业干货,进行讨论。入群需实名制。有兴趣可以加微信:aclood



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存